<?php
/**
  * Clase para la gestión de integrantes
  *
  * @autor  Andres Hocevar <aahahocevar@gmail.com>
  * @package controllers
  */
class integrantes extends CI_Controller {
/**
 *  Título.
 */
	var $titp='Integrantes';
/**
 *  Dirección url de la clase.
 */
	var $url ='integrantes/';

	function index(){

	}

/**
  * CRUD para los registro de integrantes
  *
  *
  * @return void
  * @param string   $status Tipo de acción a ejecutar puede ser create,modify,show,delete.
  * @param int      $id     Clave primaria de registro en la tabla integrantes.
  */
	function dataedit($status,$id=0){
		$this->load->library('rapyd');
		$dbprefix=$this->db->dbprefix;

		$ut= new rpd_auth_library();
		$rt=$ut->logged();
		if($rt===false) die('Acceso no permitido');
		$role   = $ut->role(1);
		$id_int = $ut->id_int();
		if($role!=1 && $id_int!=$id) die('Acceso no permitido');
		//$back='dashboard/gintegrante/'.$id;
		$back='dashboard/integ';


		$edit = new dataedit_library();
		$edit->back_save  =true;
		$edit->back_cancel=true;
		$edit->back_cancel_save   = true;
		$edit->back_cancel_delete = true;
		$edit->label = 'Integrante';
		$edit->back_url = site_url($back);

		$edit->source('integrantes');
		$edit->pre_process(array('insert'), array($this, 'pre_edit_insert'));
		$edit->pre_process(array('update'), array($this, 'pre_edit_update'));
		$edit->pre_process(array('delete'), array($this, 'pre_edit_delete'));
		
		$edit->field('input','nombre','Nombre')
			->rule('trim|required');
		
		$edit->field('input','apellido','Apellido')
			->rule('trim|required');
		
		$edit->field('input','cedula','Cédula')
			->set_attributes(array('maxlength'=>'50'))
			->rule('numeric|required|unique')
			->set_group('Datos personales');
			
		$edit->field('dropdown','tipo','Tipo')
			->options(array('A'=>'Alumno', 'P'=>'Profesor'));

		$edit->field('dropdown','id_compania','Compa&ntilde;&iacute;a')
			->option('','Ninguna')
			->options("SELECT id,nombre FROM ${dbprefix}compania ORDER BY nombre");

		$edit->field('input','seccion','Sección')
			->set_attributes(array('maxlength'=>'5'))
			->rule('required|max_length[5]');
		
		$edit->field('dropdown','cargo','Cargo')->options(array('G'=>'Gerente','D'=>'Director','P'=>'Profesional'))->rule('required')->insert_value='P';
		
		$edit->field('input','cualidades','Cualidades')
			->rule('trim');
		
		$edit->field('input','usuario','Usuario')
			->rule('unique|required|max_length[50]');
		
		$edit->field('input','hobbies','Pasatiempo')
			->rule('trim');
		
		$edit->field('input','correo','Correo Electr&oacute;nico')
			->rule('trim|required|valid_email');
		
		$edit->field('input','telefono','Tel&eacute;fono')
			->rule('trim|required');
		
		$edit->field('input','tweeter','Cuenta tweeter')
			->rule('trim')
			->set_attributes(array('maxlength'=>'100'))
			->set_group('Datos personales');
		
		if($status!='modify' && $status!='show' && $status!='update'){
			$edit->field('password','clave' ,'Contrase&ntilde;a')->rule('required|matches[clave2]')->set_group('Datos de la Cuenta');
			$edit->field('password','clave2','Confirmaci&oacute;n')->rule('required')->set_group('Datos de la Cuenta');
		}

		$edit->buttons('modify','save','undo','back','delete');
		$edit->build();

		$data['content']    = $edit;
		$data['back_url']   = $back;
		$data['header']     = 'Ficha de integrante';
		$data['title']      = 'Ficha de integrante';
		if($status!='create')
			$data['footer']     = '<a href="'.site_url('integrantes/ccclave/modify/'.$id).'" data-role="button" data-icon="gear" data-direction="reverse">Cambiar clave</a>';
		$data['headerextra'] = ($role==1)? 'Profesor: ': ($role==2)? 'Alumno Gerente: ':'Alumno: ';
		$data['headerextra'].= $ut->user('name');

		$this->load->view('view_ven', $data);
	}


/**
  * Método para que el usuario cambie la clave de si mismo
  *
  * @since 1.0
  *
  * @return void
  * @param string   $status Tipo de acción a ejecutar puede ser solo modify.
  * @param int      $id     Clave primaria de registro en la tabla integrantes.
  */
	function cclave($status,$id){
		$this->load->library('rapyd');
		$ut= new rpd_auth_library();
		$rt=$ut->logged();
		$id_int=$ut->id_int();
		$role = $ut->role();
		if($rt===false || $id_int!=$id) die('Acceso no permitido');

		$back='integrantes/modif/modify/'.$id;

		$edit = new dataedit_library();
		$edit->back_save  =true;
		$edit->back_cancel=true;
		$edit->back_cancel_save   = true;
		$edit->back_cancel_delete = true;
		$edit->label = 'Integrante';
		$edit->back_url = site_url($back);

		$edit->source('integrantes');
		$edit->pre_process(array('update'), array($this, 'pre_clave'));
		$edit->pre_process(array('insert'), array($this, 'pre_false'));
		$edit->pre_process(array('delete'), array($this, 'pre_false'));

		$edit->field('password','clavea','Contrase&ntilde;a actual')->rule('required')->set_group('Datos de la Cuenta');
		$edit->field('password','clave1','Contrase&ntilde;a nueva')->rule('required|matches[clave2]')->set_group('Datos de la Cuenta');
		$edit->field('password','clave2','Confirmaci&oacute;n')->rule('required')->set_group('Datos de la Cuenta');

		$edit->buttons('modify','save','undo','back');
		$edit->build();

		$data['content']    = $edit;
		$data['back_url']   = $back;
		$data['home_url']   = 'dashboard/gcompalu';
		$data['header']     = 'Cambio de clave';
		$data['title']      = 'Cambio de clave';
		$data['footer']     = '';
		$data['headerextra'] = ($role==1)? 'Profesor: ': ($role==2)? 'Alumno Gerente: ':'Alumno: ';
		$data['headerextra'].= $ut->user('name');

		$this->load->view('view_ven', $data);
	}

/**
  * Método para que el profesor cambie la clave de los alumnos
  *
  * @since 1.0
  *
  * @return void
  * @param string   $status Tipo de acción a ejecutar puede ser solo modify.
  * @param int      $id     Clave primaria de registro en la tabla integrantes.
  */
	function ccclave($status,$id){
		$this->load->library('rapyd');
		$ut= new rpd_auth_library();
		$rt=$ut->logged(1);
		$id_int=$ut->id_int();
		if($rt===false) die('Acceso no permitido');
		$back='integrantes/dataedit/modify/'.$id;

		$edit = new dataedit_library();
		$edit->back_save  =true;
		$edit->back_cancel=true;
		$edit->back_cancel_save   = true;
		$edit->back_cancel_delete = true;
		$edit->label = 'Integrante';
		$edit->back_url = site_url($back);

		$edit->source('integrantes');
		$edit->pre_process(array('update'), array($this, 'pre_cod_clave'));
		$edit->pre_process(array('insert'), array($this, 'pre_false'));
		$edit->pre_process(array('delete'), array($this, 'pre_false'));

		$edit->field('password','clave1' ,'Contrase&ntilde;a')->rule('required|matches[clave2]')->set_group('Datos de la Cuenta');
		$edit->field('password','clave2','Confirmaci&oacute;n')->rule('required')->set_group('Datos de la Cuenta');

		$edit->buttons('modify','save','undo','back');

		$edit->build();

		$data['content']    = $edit;
		$data['back_url']   = $back;
		$data['header']     = 'Cambio de clave';
		$data['title']      = 'Cambio de clave';
		$data['footer']     = '';
		$data['headerextra'] = 'Profesor: ';
		$data['headerextra'].= $ut->user('name');

		$this->load->view('view_ven', $data);
	}

/**
  * Pre proceso antes de borrar un integrante
  * Borra toda la trayectoria del estudiante
  *
  * @since 1.0
  *
  * @return boolean
  * @param object   $model Modelo de la tabla integrantes.
  */
	function pre_edit_delete($model){
		$ut= new rpd_auth_library();
		$rt=$ut->logged();
		if($rt===false) return false;
		$id_int=$ut->id_int();
		$id=$model->pk['id'];
		if($id_int==$id){
			$model->error_string='No se puede borrar usted mismo';
			return false;
		}

		//Borra la trayectoria
		$this->db->where('id_integrante',$id);
		$this->db->delete('subcompromisos');

		$this->db->where('id_evaluador',$id);
		$this->db->or_where('id_evaluado',$id);
		$this->db->delete('aucoevaluacion_it');

		$this->db->where('id_integrante',$id);
		$this->db->delete('actividades');

		//$cana=0;
		//$this->db->where('id_integrante',$id);
		//$this->db->from('subcompromisos');
		//$cana += $this->db->count_all_results();

		//$this->db->where('id_evaluador',$id);
		//$this->db->or_where('id_evaluado',$id);
		//$this->db->from('aucoevaluacion_it');
		//$cana += $this->db->count_all_results();

		//$this->db->where('id_integrante',$id);
		//$this->db->from('actividades');
		//$cana += $this->db->count_all_results();
		//if($cana>0){
		//	$model->error_string='No se puede borra el integrante porque tiene trayectoria.';
		//	return false;
		//}
		return true;
	}

/**
  * Pre proceso antes de insertar un integrante
  * Aplica la funcion MD5 a la clave
  *
  * @since 1.0
  *
  * @return boolean
  * @param object   $model Modelo de la tabla integrantes.
  */
	function pre_edit_insert($model){
		$clave=md5($model->get('clave'));
		$model->set('clave',$clave);
		$this->pre_edit_update($model);
		return true;
	}

/**
  * Pre proceso antes de modificar un integrante
  * Si el cargo es de gerente o director destituye
  * al integrante que tenia el cargo anterior
  *
  * @since 1.0
  *
  * @return boolean
  * @param object   $model Modelo de la tabla integrantes.
  */
	function pre_edit_update($model){
		$cargo       = $model->get('cargo');
		$id_compania = $model->get('id_compania');
		$tipo        = $model->get('tipo');
		$id          = $model->pk['id'];
		if($tipo=='A'){
			if($cargo=='G' || $cargo=='D'){
				$data = array( 'cargo' => 'P' );

				$this->db->where('id_compania' , $id_compania);
				$this->db->where('cargo'       , $cargo);
				$this->db->where('id <>'       , $id);
				$this->db->update('integrantes', $data);
			}
		}
		return true;
	}

/**
  * Método que permite el registro de integrantes
  *
  * @since 1.0
  *
  * @return void
  */
	function registrar($status){
		$sel=array('activo');
		$this->db->select($sel);
		$this->db->from('curso');
		$this->db->limit(1);
		$query = $this->db->get();
		if ($query->num_rows() > 0){
			$row = $query->row();
			$acins = ($row->activo!='1');
			if(!$acins) die('Acceso no autorizado.');
		}


		$this->load->library('rapyd');
		$dbprefix=$this->db->dbprefix;

		$edit = new dataedit_library();
		$edit->back_save  =true;
		$edit->back_cancel=true;
		$edit->back_cancel_save   = true;
		$edit->back_cancel_delete = true;
		$edit->label = 'Registro de integrantes';
		$edit->back_url = site_url('inicio/login');

		$edit->source('integrantes');
		$edit->pre_process(array('insert'), array($this, 'pre_registrar_insert'));
		$edit->pre_process(array('update'), array($this, 'pre_registrar_update'));
		$edit->field('input','nombre','Nombre')
			->rule('ucwords|trim|required')
			->set_attributes(array('maxlength'=>'100'))
			->set_group('Datos personales');
		$edit->field('input','apellido','Apellido')
			->set_attributes(array('maxlength'=>'100'))
			->rule('ucwords|trim|required')
			->set_group('Datos personales');
		$edit->field('input','cedula','Cédula')
			->set_attributes(array('maxlength'=>'50'))
			->rule('numeric|required|unique')
			->set_group('Datos personales');
		$edit->field('input','cualidades','Cualidades o virtudes')
			->set_attributes(array('maxlength'=>'100'))
			->rule('trim')
			->set_group('Datos personales');
		$edit->field('input','hobbies','Pasatiempo')
			->set_attributes(array('maxlength'=>'100'))
			->rule('trim')
			->set_group('Datos personales');
		$edit->field('input','telefono','Tel&eacute;fono')
			->rule('trim|required|phone')
			->set_attributes(array('maxlength'=>'100'))
			->set_group('Datos personales');
		$edit->field('input','tweeter','Cuenta tweeter')
			->rule('trim')
			->set_attributes(array('maxlength'=>'100'))
			->set_group('Datos personales');
		$edit->field('dropdown','id_compania','Compa&ntilde;&iacute;a')->rule('callback_chcompania')->option('','Crear una nueva')->options("SELECT id,nombre FROM ${dbprefix}compania ORDER BY nombre")->set_group('Datos corporativos');
		$edit->field('input','c_compania','Nombre de la compa&ntilde;&iacute;a: <br>(Solo si selecciono crear una nueva)')
			->rule('callback_chncompania|max_length[200]')
			->set_group('Datos corporativos')
			->set_attributes(array('size'=>'15','maxlength'=>'200','when'=>'create'))
			->when='create';
		$edit->field('input','seccion','Sección')
			->set_attributes(array('maxlength'=>'5'))
			->rule('required|max_length[5]');
		$edit->field('dropdown','cargo','Cargo')->options(array('G'=>'Gerente','D'=>'Director','P'=>'Profesional'))->set_group('Datos corporativos')->insert_value='P';
		$edit->field('input','correo','Correo Electr&oacute;nico')
			->rule('trim|required|valid_email|max_length[100]')
			->set_attributes(array('maxlength'=>'100'))
			->set_group('Datos de la Cuenta');
		$edit->field('input','usuario','Usuario')
			->rule('required|unique|alpha_dash|max_length[50]')
			->set_attributes(array('maxlength'=>'50'))
			->set_group('Datos de la Cuenta');
		if($status!='show'){
			$edit->field('password','clave1','Contrase&ntilde;a')->rule('required|matches[clave2]')->set_group('Datos de la Cuenta');
			$edit->field('password','clave2','Confirmaci&oacute;n')->rule('required')->set_group('Datos de la Cuenta');
		}
		//$edit->field('captcha'  ,'verifica','');

		$edit->buttons('save','undo','back');

		$edit->build();

		$data['content']    = $edit;
		$data['back_url']   = 'inicio/login';
		$data['home_url']   = 'inicio/login';
		$data['header']     = 'Gerencia de Compa&ntilde;&iacute;a';
		$data['title']      = 'Ficha de Compa&ntilde;&iacute;as';
		$data['footer']     = '';
		$this->load->view('view_ven', $data);
	}

/**
  * Valida el nombre de una compañía
  *
  * @since 1.0
  *
  * @return boolean
  * @param string    $str  Nombre de la compañía.
  */
	public function chncompania($str){
		if(empty($str)) return true;
		$this->db->where('nombre', trim($str));
		$this->db->from('compania');
		$cana=$this->db->count_all_results();

		if ($cana > 0) {
			//echo 'Ya existe una compa&ntilde;ia con el nombre propuesto, por favor elija otro.';
			return false;
		} else {
			return true;
		}
	}

/**
  * Valida la elección de una compañía
  *
  * @since 1.0
  *
  * @return boolean
  * @param string    $str  Clave primaria de la compañía.
  */
	public function chcompania($str){
		if(empty($str)){
			$ccomp=isset($_POST['c_compania'])? $_POST['c_compania'] : '';
			if(empty($ccomp)){
				//echo 'Si no elije una compa&ntilde;ia debe proponer una.';
				return false;
			}
		}
		return true;
	}

/**
  * Pre proceso para prohibir acciones indebidas
  *
  * @since 1.0
  *
  * @return boolean
  * @param object     $model  Modelo de la tabla integrantes.
  */
	function pre_registrar_update($model){
		$model->error_string = 'Acción prohibida';
		return false;
	}


/**
  * Pre proceso para validar o insertar una nueva compañía al momento de registrarse
  *
  * @since 1.0
  *
  * @return boolean
  * @param object     $model  Modelo de la tabla integrantes.
  */
	function pre_registrar_insert($model){
		$model->set('tipo','A');
		$id_compania= $model->get('id_compania');
		$c_compania = $_POST['c_compania'];
		if(!$this->chncompania($c_compania)){
			$model->error_string = 'Ya existe una compañía con el nombre propuesto, por favor elija otro.';
			return false;
		}

		if(!$this->chcompania($id_compania)){
			$model->error_string = 'Si no elije una compa&ntilde;ia debes proponer una.';
			return false;
		}

		if(empty($id_compania)){
			if(!empty($c_compania)){
				$data = array('nombre' => trim($c_compania) );
				$this->db->insert('compania', $data);
				$id_compania=$this->db->insert_id();
				$model->set('id_compania',$id_compania);
			}
		}
		$id_compania = $model->get('id_compania');
		if(!empty($id_compania)){
			$cargo       = $model->get('cargo');
			if($cargo=='D' || $cargo=='G'){
				$this->db->where('id_compania', $id_compania);
				$this->db->where('cargo'      , $cargo);
				$this->db->from('integrantes');
				if($this->db->count_all_results()>0){
					$model->error_string = 'Ya existe un integrante con ese cargo.';
					return false;
				}
			}
		}

		$clave=$_POST['clave1'];
		$model->set('clave',md5($clave));
		$model->rm('c_compania');
		return true;
	}


/**
  * Metodo para gestionar la cuenta propia de usuario
  *
  * @since 1.0
  *
  * @return boolean
  * @param object     $model  Modelo de la tabla integrantes.
  */
	function modif($status,$id){
		$this->load->library('rapyd');
		$ut= new rpd_auth_library();
		$rt    = $ut->logged();
		$id_int= $ut->id_int();
		if($rt===false || $id_int!=$id) die('Acceso no permitido');
		$role = $ut->role();
		if($role == 1 ){
			$back='dashboard';
		}else{
			$back='dashboard/gcompalu';
			$data['home_url']   = $back;
		}

		$edit = new dataedit_library();
		$edit->back_save  =true;
		$edit->back_cancel=true;
		$edit->back_cancel_save   = true;
		$edit->back_cancel_delete = true;
		$edit->validation->set_message('clavesan','Clave anterior inv&aacute;lida');
		$edit->label = 'Integrante';
		$edit->back_url = site_url($back);

		$edit->source('integrantes');
		$edit->pre_process(array('insert'), array($this, 'pre_false'));
		$edit->pre_process(array('delete'), array($this, 'pre_false'));

		$edit->field('input','nombre','Nombre')->rule('ucwords|trim|required')->set_group('Datos personales');
		$edit->field('input','apellido','Apellido')->rule('ucwords|trim|required')->set_group('Datos personales');
		$edit->field('input','cedula','Cédula')
			->set_attributes(array('maxlength'=>'50'))
			->rule('numeric|required|unique')
			->set_group('Datos personales');

		$edit->field('input','seccion','Sección')
			->set_attributes(array('maxlength'=>'5'))
			->rule('required')
			->set_group('Datos personales');

		$edit->field('input','cualidades','Cualidades o virtudes')->rule('trim')->set_group('Datos personales');
		$edit->field('input','hobbies','Pasatiempo')->rule('trim')->set_group('Datos personales');
		$edit->field('input','telefono','Tel&eacute;fono')->rule('trim|required')->set_group('Datos personales');
		$edit->field('input','tweeter','Cuenta tweeter')->rule('trim')->set_group('Datos personales');

		$edit->field('input','correo','Correo Electr&oacute;nico')->rule('trim|required|valid_email')->set_group('Datos de la Cuenta');
		$edit->field('input','usuario','Usuario')->rule('required|unique|alpha_dash|max_length[50]')->set_group('Datos de la Cuenta')->mode='autohide';

		$edit->buttons('save','undo','modify','back');

		$edit->build();

		$data['content']    = $edit;
		$data['back_url']   = $back;
		$data['header']     = 'Gerencia de Compa&ntilde;&iacute;a';
		$data['title']      = 'Ficha de Compa&ntilde;&iacute;as';
		$data['footer']     = '<a href="'.site_url('integrantes/cclave/modify/'.$id).'" data-role="button" data-icon="gear" data-direction="reverse">Cambiar clave</a>';
		if($role==1){
			$data['footer'].= '<a href="'.site_url('curso/dataedit/modify/1').'" data-role="button" data-icon="gear" data-direction="reverse">Configurar Curso</a>';
		}
		$data['headerextra'] = ($role==1)? 'Profesor: ': (($role==2)? 'Alumno Gerente: ':'Alumno: ');
		$data['headerextra'].= $ut->user('name');

		$this->load->view('view_ven', $data);
	}

/**
  * Pre proceso para evitar acciones prohibidas
  *
  * @since 1.0
  *
  * @return boolean
  * @param string   $clave Clave anterior.
  * @param object   $model Modelo de la tabla integrantes.
  */
	function pre_false($model){
		$model->error_string = 'Acción prohibida';
		return false;
	}

/**
  * Pre proceso que encripta la clave antes de guardarla
  * sin validación de la clave anterior
  *
  * @since 1.0
  *
  * @return boolean
  * @param object     $model  Modelo de la tabla integrantes.
  */
	function pre_cod_clave($model){
		$clave=$_POST['clave1'];
		$model->set('clave',md5($clave));
		return true;
	}

/**
  * Pre proceso que encripta la clave antes de guardarla
  * con validación de la clave anterior
  *
  * @since 1.0
  *
  * @return boolean
  * @param object     $model  Modelo de la tabla integrantes.
  */
	function pre_clave($model){
		$clave = $_POST['clavea'];
		if($this->chclavesan($clave,$model)){
			$clave=$_POST['clave1'];
			$model->set('clave',md5($clave));
			return true;
		}else{

			$model->error_string = '--La Clave anterior no coincide con la registrada.';
			return false;
		}
	}

/**
  * Validación de la clave
  * Chequea que la clave anterior sea correcta
  *
  * @since 1.0
  *
  * @return boolean
  * @param string   $clave Clave anterior.
  * @param object   $model Modelo de la tabla integrantes.
  */
	function chclavesan($clave,&$model){
		$sel=array('clave');
		$this->db->select($sel);
		$this->db->from('integrantes');
		$this->db->where('id',$model->pk['id']);
		$query = $this->db->get();
		$row   = $query->row();
		echo $row->clave.'=='.md5($clave);
		if($row->clave==md5($clave)){
			return true;
		}
		return false;

	}
}
